/*
* 给定一个数组 prices ，它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。

你只能选择 某一天 买入这只股票，并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。

返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润，返回 0 。

来源：力扣（LeetCode）
链接：https://leetcode.cn/problems/best-time-to-buy-and-sell-stock
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
* */
fun main() {
//    val intArray = intArrayOf(7, 1, 5, 3, 6, 4)
    val intArray = intArrayOf(7, 7, 7, 3, 6, 4)
//    val intArray = intArrayOf(7, 6, 4, 3, 1)
//    println(e7(intArray))
    println(e7_2(intArray))
}

private fun e7_2(prices: IntArray): Int {
    var min = prices[0]
    var max = 0
    for (i1 in prices) {
        val i2 = i1 - min
        if (i2 < 0) {
            min = i1
        }
        if (i2 > max) {
            max = i2
        }
    }
    return max
}

/*耗时过长*/
private fun e7(prices: IntArray): Int {
    val size = prices.size
    var p = 0
    var max = 0
    for (i in 0 until size) {
        for (i2 in i + 1 until size) {
            if (prices[i] < prices[i2]) {
                p = prices[i2] - prices[i]
//                println("p:$p")
                if (p > max) max = p
            }
        }
    }
    return max
}